home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / clonecd / September 93.img / Archives / Decoration / Screensavers / Screen Savers / TwilightZone / source / aevt.c next >
Text File  |  1993-06-14  |  4KB  |  187 lines

  1. /*-------------------------------------------------------------------------------------
  2.  *
  3.  * Simple Sample Application Framework
  4.  *
  5.  * ©1991 Apple Computer
  6.  *
  7.  -------------------------------------------------------------------------------------*/
  8. /*
  9.  * aevt.c -- appleevents code
  10.  *
  11.  * change history:
  12.  *
  13.  * SJF        11/6/91        1.0d1        initial coding
  14.  *
  15.  */
  16.  
  17. #include <Types.h>
  18. #include <Menus.h>
  19.  
  20. #include <Traps.h>
  21. #include <GestaltEqu.h>
  22. #include <AppleEvents.h>
  23.  
  24. #include "const.h"
  25. #include "trapAvailable.h"
  26. #include "events.h"
  27. #include "globals.h"
  28. #include "utils.h"
  29.  
  30. #include "aevt.h"
  31.  
  32. Boolean SupportsAEVT(void)
  33. {
  34.     OSErr err;
  35.     long response;
  36.     
  37.     if (!TrapAvailable(_Gestalt))
  38.         return false;
  39.     
  40.     err = Gestalt(gestaltAppleEventsAttr,&response);
  41.     if (err!=noErr)
  42.         return false;
  43.         
  44.     return (response && (response << gestaltAppleEventsPresent));
  45. }
  46.  
  47.  
  48. void DoHighLevelEvent(EventRecord *ev)
  49. {
  50.     OSErr err;
  51.     
  52.     err = AEProcessAppleEvent(ev);    
  53.     if (err!=noErr)
  54.         DoError(err);
  55. }
  56.  
  57.  
  58. void RegisterMyEvents(void)
  59. {
  60.     OSErr err;
  61.     
  62.     if (!SupportsAEVT())
  63.         return;
  64.     
  65.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,(ProcPtr)&MyAEHandleOAPP,0L,false);
  66.     if (err!=noErr)
  67.         return;
  68.                 
  69.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,(ProcPtr)&MyAEHandleODOC,0L,false);
  70.     if (err!=noErr)
  71.         return;
  72.                 
  73.     err = AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,(ProcPtr)&MyAEHandlePDOC,0L,false);
  74.     if (err!=noErr)
  75.         return;
  76.                 
  77.     err = AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,(ProcPtr)&MyAEHandleQUIT,0L,false);
  78.     if (err!=noErr)
  79.         return;            
  80. }
  81.  
  82.  
  83. pascal OSErr MyAEHandleOAPP(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  84. {
  85.     OSErr err;
  86.     
  87.     err = MyGotRequiredParams(theAppleEvent);
  88.     if (err!=noErr)
  89.         return err;
  90. }
  91.  
  92.  
  93. pascal OSErr MyAEHandleODOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  94. {
  95.     FSSpec myFSS;
  96.     AEDescList docList;
  97.     OSErr err;
  98.     long index,itemsInList;
  99.     Size actualSize;
  100.     AEKeyword keywd;
  101.     DescType returnedType;
  102.     
  103.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  104.     if (err!=noErr)
  105.         return err;
  106.     
  107.     err = MyGotRequiredParams(theAppleEvent);
  108.     if (err!=noErr)
  109.         return err;
  110.     
  111.     err = AECountItems(&docList,&itemsInList);
  112.     for (index=1; index<=itemsInList; index++) {
  113.         err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  114.                         sizeof(myFSS),&actualSize);
  115.         if (err!=noErr)
  116.             return err;
  117.             
  118.         err = HandleOpenDoc(&myFSS);
  119.         if (err!=noErr)
  120.             return err;
  121.     }
  122.     err = AEDisposeDesc(&docList);
  123.     return noErr;
  124. }
  125.  
  126.  
  127. pascal OSErr MyAEHandlePDOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  128. {
  129.     FSSpec myFSS;
  130.     AEDescList docList;
  131.     OSErr err;
  132.     long index,itemsInList;
  133.     Size actualSize;
  134.     AEKeyword keywd;
  135.     DescType returnedType;
  136.     
  137.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  138.     if (err!=noErr)
  139.         return err;
  140.     
  141.     err = MyGotRequiredParams(theAppleEvent);
  142.     if (err!=noErr)
  143.         return err;
  144.     
  145.     err = AECountItems(&docList,&itemsInList);
  146.     for (index=1; index<=itemsInList; index++) {
  147.         err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  148.                         sizeof(myFSS),&actualSize);
  149.         if (err!=noErr)
  150.             return err;
  151.             
  152.         err = HandlePrintDoc(&myFSS);
  153.         if (err!=noErr)
  154.             return err;
  155.     }
  156.     err = AEDisposeDesc(&docList);
  157.     return noErr;
  158. }
  159.  
  160.  
  161. pascal OSErr MyAEHandleQUIT(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  162. {
  163.     OSErr err;
  164.     
  165.     err = MyGotRequiredParams(theAppleEvent);
  166.     if (err!=noErr)
  167.         return err;
  168.     
  169.     gDone = true;
  170. }
  171.  
  172.  
  173. OSErr MyGotRequiredParams(AppleEvent *theAppleEvent)
  174. {
  175.     DescType returnedType;
  176.     Size actualSize;
  177.     OSErr err;
  178.     
  179.     err = AEGetAttributePtr(theAppleEvent,keyMissedKeywordAttr,typeWildCard,
  180.                             &returnedType,nil,0,&actualSize);
  181.     if (err == errAEDescNotFound)
  182.         err = noErr;
  183.     else if (err==noErr)
  184.         err = errAEEventNotHandled;
  185.     return err;
  186. }
  187.